/**
 * 管理后台工具显示问题诊断脚本
 */

const fs = require('fs')

function diagnoseAdminTools() {
  console.log('🔍 诊断管理后台工具显示问题...\n')
  
  let issues = []
  let fixes = []
  
  // 1. 检查认证相关文件
  console.log('📁 检查认证文件:')
  
  const authFiles = [
    'lib/api-client.ts',
    'hooks/use-admin-data.ts',
    'src/app/api/admin/tools/route.ts',
    'components/admin/admin-dashboard.tsx'
  ]
  
  authFiles.forEach(file => {
    if (fs.existsSync(file)) {
      console.log(`   ✅ ${file}`)
    } else {
      console.log(`   ❌ ${file} - 文件缺失`)
      issues.push(`缺失文件: ${file}`)
    }
  })
  
  // 2. 检查API客户端认证逻辑
  console.log('\n🔐 检查API客户端认证:')
  
  try {
    const apiClientContent = fs.readFileSync('lib/api-client.ts', 'utf8')
    
    // 检查是否使用统一的auth-token
    if (apiClientContent.includes('auth-token')) {
      console.log('   ✅ API客户端使用统一的auth-token')
    } else {
      console.log('   ❌ API客户端未使用统一的auth-token')
      issues.push('API客户端未配置统一的auth-token支持')
      fixes.push('修复lib/api-client.ts中的getAuthToken函数')
    }
    
    // 检查是否不再使用admin_token
    if (!apiClientContent.includes('admin_token')) {
      console.log('   ✅ API客户端已移除admin_token')
    } else {
      console.log('   ❌ API客户端仍在使用admin_token')
      issues.push('API客户端仍在使用admin_token')
      fixes.push('从lib/api-client.ts中移除admin_token相关代码')
    }
    
  } catch (error) {
    console.log('   ❌ 无法读取API客户端文件')
    issues.push('API客户端文件读取失败')
  }
  
  // 3. 检查useAdminData Hook
  console.log('\n📊 检查数据管理Hook:')
  
  try {
    const hookContent = fs.readFileSync('hooks/use-admin-data.ts', 'utf8')
    
    if (hookContent.includes('adminApi.getTools()')) {
      console.log('   ✅ 使用adminApi获取工具')
    } else {
      console.log('   ❌ 未使用adminApi获取工具')
      issues.push('useAdminData Hook未使用adminApi')
    }
    
    if (hookContent.includes('Bearer dev-admin')) {
      console.log('   ⚠️  仍有硬编码的dev-admin令牌')
      issues.push('useAdminData Hook包含硬编码令牌')
      fixes.push('移除hooks/use-admin-data.ts中的硬编码令牌')
    } else {
      console.log('   ✅ 无硬编码令牌')
    }
    
  } catch (error) {
    console.log('   ❌ 无法读取useAdminData Hook文件')
    issues.push('useAdminData Hook文件读取失败')
  }
  
  // 4. 检查管理员API路由
  console.log('\n🛡️  检查管理员API:')
  
  try {
    const apiRouteContent = fs.readFileSync('src/app/api/admin/tools/route.ts', 'utf8')
    
    if (apiRouteContent.includes('requireAdmin')) {
      console.log('   ✅ API路由有管理员认证')
    } else {
      console.log('   ❌ API路由缺少管理员认证')
      issues.push('管理员API路由缺少认证保护')
    }
    
    if (apiRouteContent.includes('getTools(request)')) {
      console.log('   ✅ API路由传递请求对象')
    } else {
      console.log('   ❌ API路由未传递请求对象')
      issues.push('API路由未传递请求对象给getTools')
    }
    
  } catch (error) {
    console.log('   ❌ 无法读取管理员API路由文件')
    issues.push('管理员API路由文件读取失败')
  }
  
  // 5. 检查数据库配置
  console.log('\n🗄️ 检查数据库配置:')
  
  const dbEnvVars = ['DATABASE_URL', 'FORCE_DATABASE']
  dbEnvVars.forEach(envVar => {
    if (process.env[envVar]) {
      console.log(`   ✅ ${envVar} - 已配置`)
    } else {
      console.log(`   ⚠️  ${envVar} - 未配置`)
      issues.push(`环境变量${envVar}未配置`)
    }
  })
  
  // 6. 生成诊断报告
  console.log('\n📋 诊断报告:')
  console.log('===================')
  
  if (issues.length === 0) {
    console.log('✅ 未发现明显问题')
    console.log('\n💡 可能的原因:')
    console.log('1. 用户未登录或令牌过期')
    console.log('2. 数据库中没有工具数据')
    console.log('3. 网络连接问题')
    console.log('4. 服务器未启动')
    
    console.log('\n🔧 建议的调试步骤:')
    console.log('1. 检查浏览器控制台错误')
    console.log('2. 检查网络请求状态')
    console.log('3. 验证管理员登录状态')
    console.log('4. 使用调试面板检查API响应')
    
  } else {
    console.log(`❌ 发现 ${issues.length} 个问题:`)
    issues.forEach((issue, index) => {
      console.log(`   ${index + 1}. ${issue}`)
    })
    
    if (fixes.length > 0) {
      console.log('\n🔧 建议的修复:')
      fixes.forEach((fix, index) => {
        console.log(`   ${index + 1}. ${fix}`)
      })
    }
  }
  
  // 7. 提供调试命令
  console.log('\n🛠️  调试命令:')
  console.log('1. 检查认证系统: npm run test:auth')
  console.log('2. 启动开发服务器: npm run dev')
  console.log('3. 查看管理后台: http://localhost:3000/admin')
  console.log('4. 使用调试面板: 管理后台 -> 调试标签')
  
  // 8. 快速修复脚本
  console.log('\n⚡ 快速修复:')
  console.log('如果是认证问题，请尝试:')
  console.log('1. 重新登录管理后台')
  console.log('2. 清除浏览器缓存')
  console.log('3. 检查JWT_SECRET环境变量')
  
  return issues.length === 0
}

// 运行诊断
if (require.main === module) {
  const success = diagnoseAdminTools()
  
  console.log('\n' + '='.repeat(50))
  if (success) {
    console.log('✨ 诊断完成，未发现明显配置问题')
    console.log('请使用管理后台的调试面板进一步排查')
  } else {
    console.log('🔧 诊断完成，请根据上述建议进行修复')
  }
  
  process.exit(success ? 0 : 1)
}

module.exports = { diagnoseAdminTools }
